package entidades;

import java.util.concurrent.Semaphore;

import view.Main;

public class Recurso extends Vertice {

	private int identificador;
	private String descricao;
	private Processo processo;
	private Semaphore mutex;
	public boolean marcadopreto;

	public Recurso(final int identificador, final String descricao) {
		super(descricao, 1);
		this.descricao = descricao;
		this.identificador = identificador;
		mutex = new Semaphore(1);
	}

	public int getIdentificador() {
		return identificador;
	}

	public void setIdentificador(int identificador) {
		this.identificador = identificador;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public Processo getProcesso() {
		return processo;
	}

	public void setProcesso(Processo processo) {
		this.processo = processo;
	}

	public Semaphore getMutex() {
		return mutex;
	}

	public void setMutex(Semaphore mutex) {
		this.mutex = mutex;
	}
	
	public void requisitarPosse(Processo aobjProcesso){
		try {
			mutex.acquire();
			if(aobjProcesso.vivo){
				//E se o recurso j� estiver com outro processo?
				Main.getInstance().removeRecursoSolicitado(aobjProcesso, this);
				Main.getInstance().obterRecurso(this, aobjProcesso);
				this.setStatus("Obtido");
				/*PanelLog.logTxt.append("O processo " + aobjProcesso.getIdentificador()
						+ " est� utilizando o recurso "
						+ getIdentificador()+"\n");*/
				tempoDecU = tempoUtilizacao;
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public void liberar(Processo processoAux){
		//c�digo do grafo
		setStatus("Livre");
		mutex.release();
		processo = null;
	}
	
	@Override
	public boolean equals(Object obj) {
		if(obj != null && obj instanceof Recurso){
			return identificador == ((Recurso)obj).getIdentificador();
		}
		return false;
		
	}

}
